27.ユ−ザ−フォ−ム
Excel95で使用していたダイアログシ−トと、Excel97からのユ−ザ−フォ−ムの互換性は全く
なく、Excel95のダイアログをActiveXコントロ−ル(ボタン・ボックス・リスト等のユ−ザ−フォ−ム
へ配置するパ−ツの事を総称して「ActiveXコントロ−ル」と言う)を使用して作成する場合は、
Excel97/2000上で作り直さなければならない。ただし、Excel95のダイアログを97/2000の
ユ−ザ−フォ−ムへ置きかえる場合、Subプロシ−ジャはそのまま又は一部変更して使用出来る
ので、本章ではSubプロシ−ジャの変更箇所を中心に記載する。したがってExcel97/2000から
スタ−トの方は95部分は読み飛ばして下さい。
(説明の例題は、KIcopy(Excel95)をExcel97/2000へ
置き換えて、KIcopy2000を作成した時の内容が中心で、
記録しておくと今後自分がユ−ザ−フォ−ム作成時活用できると思われる事項を記載した)
※ ユ−ザ−フォ−ムのツ−ルボックスにあるコントロ−ル一覧
|
コントロ−ル名 |
オブジェクト名 |
略称 |
機能 |
| |
ユ−ザ−フォ−ム |
UserFome1 |
frm |
各種コントロ−ルを配置し複数情報の入力可 |
 |
ラベル |
Label1 |
lbl |
コントロ−ルの説明やタイトロに使用 |
 |
テキストボックス |
TextBox1 |
txt |
キ−ボ−ド又はマクロからデ−タを入力出来る |
 |
コンボボックス |
ComboBox1 |
cbo |
選択項目をドロップダウンで表示(入力も可) |
 |
リストボックス |
ListBox1 |
lst |
選択項目をリスト表示(自動的にスクロ−ルバ−付く) |
 |
チェックボックス |
ChecBox1 |
chk |
チェックマ−クを付けたり外したり出来る |
 |
オプションボタン |
OptionButton1 |
opt |
通常2個以上配置し、一個のみを選択 |
 |
トグルボタン |
ToggleButton1 |
tgl |
押すことでオン/オフ(くぼんた表示)を選択 |
 |
フレ−ム |
Frame1 |
fra |
関連コントロ−ルをグル−プ化し左上に表題表示 |
 |
コマンドボタン |
CommanButton1 |
cmd |
ボタンを押すとイベントが発生しマクロ処理できる |
 |
タブストリップ |
TabStrio1 |
tab |
タブで切り替え複数ペ−ジを表示 |
 |
マルチペ−ジ |
MultiPage |
mlp |
タブストリップと似ているが、ペ−ジ毎のセイアウト可 |
 |
スクロ−ルバ− |
ScrollBar |
sur |
スクロ−ルにより値を変化できる |
 |
スピンボタン |
SpinButton1 |
spn |
2個の矢印ボタンで値を設定できる |
 |
イメ−ジ |
Image1 |
img |
画像(bmp、gif、ico)を表示 |
 |
WebBrowser |
WebBrowser1 |
img |
Web(htmlファイル)を表示する |
上記の「略称」3文字は、Microsoft社推奨の表記であり既存のオブジェクト名
を変更して使用する場合、この略称を使用すると他の方がマクロを見た場合の
理解が容易になる。
27−1ユ−ザ−フォ−ム
(1)概略
[1]イベントが充実しており、操作性のよいダイアログボックスを作成できる。
[2]各コントロ−ル毎にプロパティウインドウから各種設定ができ、特に専門的な
知識が無くともダイアログボックスが作成できる。
[3]ActiveXコントロ−ルは、他のOfficeアプリケ−ションで使用できると共に、
HTMLファイルにも組み込みが可能である。
※いずれにしても今後ダイアログボックス作成はActiveXコントロ−ルが主流に
なるので、新しく作成するダイアログボックスはこちらを使用した方がよい。
(2)Excel95ダイアログ(OLEカスタムコントロ−ル)との比較・注意点
[1]ユ−ザ−フォ−ムはダイアログボックス作成をマクロ化出来ない。
(Excel95ではダイアログボックス作成をマクロで記述<自動記録も可>でき、
ダイアログシ−トでなくマクロを記述し使用者側で再生する方式では、容量は
91Kb→23Kb<KIcopyの例>になりExcel容量を3分の1以下にする事ができた)
(なお、Excel95で作成したダイアログボックス作成マクロをExcel2000の
標準モジュ−ルへ貼り付け<勿論手で記述でもよい>Excel95のダイアログ
を表示する事は出来ます)
[2]グラフをダイアログボックスに貼り付ける事ができたが、ユ−ザ−フォ−ム
では不可(イメ−ジコントロ−ルへの表示はOK)
[3]95のOLEカスタムコントロ−ルでは、Excelを再起動しても前のデ−タが残って
おりそれなりに便利だったが、ActiveXコントロ−ルでは残っていない。
[4]ユ−ザ−フォ−ムではプロパティウインドウ等が追加され便利になったが、
Excelファイルの容量はかなり大きくなった(60KB→211KB<例:KIcopy>)
※上記は誤解や知識不足が含まれている可能性あり、気が付いたら更新する
(3)ユ−ザ−フォ−ムの制御
[1]ユ−ザ−フォ−ムの表示・非表示
Load UserForm1 ’メモリ−上へロ−ド
UserForm1.Show '表示(Showのみで可、その場合メモリ−上へロ−ドと表示を行う)
Unload UserForm1 'メモリ−上からオブジェクトを削除
UserForm1.Hide '非表示
95例
If DialogSheets("Dialog1").Show = False Then '表示
Exit Sub
End If
DialogSheets("Dialog1").Hide '非表示
[2]モ-ドレス表示
Excel95ではダイアログボックスを閉じないとアプリケ−ション操作できな
かった(モ−ダル)が、Excel2000からモ-ドレス指定しができる
Sub 例27k32()
UserForm1.Show vbModeless
又は
UserForm1.Show 0
End Sub
上記はExcel2000以外で実行するとエラ−になる。
[3]閉じる直前の処理を指定
Sub 例27k32()
[1]ダイアログを閉じた時表示するシ−トを指定したケ−ス
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Sheets("Sheet3").Select
End Sub
[2]閉じるの「X」を無効にしたケ−ス
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Cancel = True
End Sub
[2]を指定した場合は、別にボタン等で閉じるマクロを実行しないと
ユ−ザ−フォ−ムが表示状態でストップする。
参考27-1 Excel2000上へ95のダイアログ表示
下図のツ−ルバ−はExcel2000のワ−クシ−トへ
表示した場合で、上側はExcel95で使用していたフォ−ムであるが、
淡色表示になっているコントロ−ルは使用できない。下側の
コントロ−ルボックスは右クリックでプロパティウインドウも
表示でき各種設定も容易に出来るのでExcel97/2000では当然
ActiveXコントロ−ルを使用した方が良い。

-----------------------------------------------------------
Excel2000上でダイアログシ−トを挿入しExcel95と同じダイアログボックスを
作成することも下記方法で出来る。
[左下のシ−ト名を右クリック]→[挿入]→[MS Excel5.0ダイアログを指定]
・ダイアログシ−トでは上図の「フォ−ム」が全使用可能になる。
・ダイアログシ−トの追加やOLEカスタムコントロ−ルの配置等はマクロで記述可
・Excel95のダイアログを理解されている方は、Excel2000上でもダイアログシ−ト表示
機能を有効に活用し、必要に応じActiveXコントロ−ルと使い分けることにより、より
操作性のよいダイアログ作成ができると思われる。
※ ワ−クシ−トにコマンドボタンを表示しそれをクリックしてマクロを実行させる
事がよくあるが、15.5KBのExcelファイルにActiveXコントロ−ルのコマンドボタンを
貼り付けクリックイベントで実行する場合は25.5KBの容量になった。それに比べ
フォ−ム(OLEカスタムコントロ−ル)のコマンドボタンを使用した場合は16.0KBで
0.5KB増えただけである。単純にあるマクロを実行させるだけであれば、私
の場合フォ−ム(OLEカスタムコントロ−ル)のコマンドボタンを使用している。
27−2ラベル

(1) 一般的使用例
上記はユ−ザ−フォ−ム作成時(処理を実行するファイルを指定)と記入した例。ラベルは
テキストボックスにように表示されているユ−ザ−フォ−ムに手入力で書き込むことは出来な。
なお下記例のようにマクロで書き込む事は勿論できます。
Sub 例272k1()
UserForm1.Label1.Caption = Int(j) & "%"
End Sub
(2) ラベル使用の応用例
ラベルの使用方法として下記例のようなプログレスバ−を作成することも出来る。これはラベルを2個重
ね合わせ、1個のラベルに背景を付けこの幅をマクロの実行に合わせ変化させればよい。また進捗量の
数値は他の1方のラベルを背景透明(BackStyle=0)指定し、文字をセンタ−表示にすればよい。

Sub 例272k2()
cend = 1500 'デバッグ用数値
'準備:ダイアログへ入力
With UserForm1
.Caption = "マクロ実行中:しばらくお待ち下さい"
.Label1.BackColor = RGB(255, 255, 0)
.Label2.TextAlign = fmTextAlignCenter
.Label2.BackStyle = 0
.Label1.Width = 0
tsiz = .Label2.Width
End With
'
Application.ScreenUpdating = False
UserForm1.Show vbModeless
For i = 1 To cend
j = i / cend * 100
With UserForm1
.Label2.Caption = Int(j) & "%"
.Label1.Width = tsiz * j / 100
End With
' ----------------------------------------------------
For j = 1 To 10000
'デバッグ用タイミング(実際はここに実行マクロを入れる)
Next
'-----------------------------------------------------
DoEvents
Next
Unload UserForm1
End Sub
・上記実行はユ−ザ−フォ−ムにラベルを2個重ね合わせて作成する
・Label1、Label2ともBorderStyle=1にして境界線を付ける(重ね合わせはこの線を同じ場所にする)
・Label1.Capitionは空白にする
・このマクロはExcel2000で実行可
27−3テキストボックス
テキストボックスは文字や数字をキ−ボ−ドから入力できる。又マクロ処理で
他のコントロ−ルにあるデ−タを表示する場合もよく使用する。
------------------------------------------------------------------------
[例1]ユ−ザ−フォ−ムを表示した時、テキストボックスにあるデ−タを表示
したい場合は、下記例のように"UserForm1.Show"の前にデ−タを入力しておく。
(Load UserForm1でメモリ−へロ−ドし、それから設定するのが正式と思われるが
下記例のように時に何もしないで設定しても特に問題なかった)
With UserForm1
.txt1.Text = 0
.txt2.Text = Date
End With
UserForm1.Show
------------------------------------------------------------------------
[例2]下記はフォ−カスをextBox3に設定した例
With UserForm1
.TextBox3.SetFocus
End With
------------------------------------------------------------------------
[例3]下記はtxt4へマクロで表示した例(背景はプロパティウインドウで設定した)
UserForm1.txt4.Text = phn1 & " --→ " & phn2
------------------------------------------------------------------------
[例4]Excel95例
DialogSheets("Dialog1").EditBoxes("txt1").Text = Date
27−4コンボボックス
テキストボックスとリストボックスの機能を合わせ持ち、リストにないデ−タ
もテキストボックス部へ入力できる便利な特徴がある。

------------------------------------------------------------------------
[例1]クリックした時の処理例
下記は、選択されているNOを変数"ino1"へ入れ、もし選択が無い場合(-1)は
処理を終了し、あった場合は"ドロップダウン1"オブジェクトを実行
Private Sub cbo1_DropButtonClick()
Sheets("Sheet1").Select
With UserForm1.cbo1
ino1 = .ListIndex
If ino1 = -1 Then
Exit Sub
End If
End With
ドロップダウン1
End Sub
------------------------------------------------------------------------
[例2]コンボボックスへ表示
下記例は、"Sheet1"のA1〜ien(変数デ−タ)にあるデ−タをcbo1に取込み、
変数"inoc"で指定した項目をテキストボックス部へ表示
Sub drop表示1()
ien = "$" & Mid(Str(iens), 2)
With UserForm1.cbo1
.RowSource = "Sheet1" & "!$j$1:$j" & ien
.ListIndex = (inoc - 1)
End With
End Sub
------------------------------------------------------------------------
[例4]Excel95例
With DialogSheets("Dialog1").DropDowns("cbo1")
.ListFillRange = shname & "!$j$1:$j" & ien
.ListIndex = (ino)
End With
27−5リストボックス
複数の項目をリストに表示出来、その項目を選択することが出来る。
なお、表示する項目が多くなり表示が溢れた場合は自動的にスクロ−ルバ−
が付く(項目選択の方法は、1個のみ1種と複数個2種の3種類ある)

------------------------------------------------------------------------
[例1]
下記は、ダブルクッリクで実行するイベントプロシ−ジャ
no = .ListIndex → 選択されたNO取得
a1 = .List(no) → 選択されたNOの内容
Private Sub lst1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
With UserForm1.lst1
no = .ListIndex
a1 = .List(no)
If InStr(a1, "◇") > 0 Then
Exit Sub
End If
End With
リスト表示1
End Sub
------------------------------------------------------------------------
[例2]選択項目の解除
リストボックスから項目を選択し、同じリストボックスへ表示すると前に
選択した項目がそのまま残り項目が黒く表示されてしまう。Excel95では
ListIndex = (0)で選択は消え簡単だったが、Excel97/2000ではListIndex = (-1)
はエラ−になり使用できない。下記イベントプロシシ−ジャで何とか
選択の黒色を消すことが出来た。なお、1項目選択の"fmMultiSelectSingle"
の場合は1度選択すると、リストの内容を変えても必ず選択のクロが1個残り
選択なしの状態に出来なかった。したがって下記の方法で前の選択を消す
場合は複数項目選択可能状態を指定する必要がある。
Private Sub lst1_Change()
If ldb1 = 1 Then
With UserForm1.lst1
For i = 1 To .ListCount
.Selected(i - 1) = False
Next
End With
ldb1 = 0
End If
End Sub
------------------------------------------------------------------------
[例3]リストへ表示
下記例は、"Sheet1"のA1〜rc(変数デ−タ)にあるデ−タをlst1へ表示
Sub リスト表示1()
If rc = 0 Then
rc = 1
End If
UserForm1.lst1.RowSource = "Sheet1" & "!$a$1:a" & rc
End Sub
------------------------------------------------------------------------
[例4]Excel95例
With DialogSheets("Dialog1").ListBoxes(listb)
.ListFillRange = shname & "!$a$1:a" & rc 'リストの参照範囲
.ListIndex = (0)
End With
27−6フレ−ム・オプションボタン

複数の選択項目を1つのグル−プにすると、そのグル−プ
から1個選択すると他の項目は自動的にチェックマ−クは外れる。なお
グル−プ化は"GroupName"を同一に指定すればよいが、フレ−ムで囲えば
"GroupName"を指定しなくとも同一グル−プになる。
'コピ−
If UserForm1.opt4.Value = True Then
----コピ−のマクロ(略)--------
'移動
Else
----移動のマクロ(略)--------
End If
------------------------------------------------------------------------
Excel95例
'コピ−
If DialogSheets("Dialog1").OptionButtons(4).Value = xlOn Then
----コピ−のマクロ(略)--------
'移動
Else
----移動のマクロ(略)--------
End If
27−7コマンドボタン
マウスをクッリックでイベント発生

Private Sub cmd1_Click()
If phn1 = "" Then
MsgBox "ファイルを選択してから実行して下さい"
Exit Sub
End If
Sheets("Sheet1").Select
fff1 = Cells(a2(f), 1)
移動
End Sub
------------------------------------------------------------------------
Excel95例
Sub ex95()
On Error Resume Next
FileCopy phn1 & fff1, phn2 & fff1
If Err = 70 Then
MsgBox "同一フォルダーへのコピーは出来ません"
On Error GoTo 0
Exit Sub
End If
On Error GoTo 0
27−8スピンボタン
数値を増減すのに使用。通常テキストボックスを合わせて使用する。
下記マクロは指定した数値により日付が変わる。

Private Sub spn1_Change()
Dim hiz As Integer '日数
With UserForm1
.txt1.Text = .spn1.Value
hiz = .txt1.Text
.txt2.Text = Date - hiz
End With
End Sub
------------------------------------------------------------------------
Excel95例
Sub ex95()
Dim hiz As Integer '日数
With DialogSheets("Dialog1")
.EditBoxes("edit1").Text = .Spinners("spin1").Value
hiz = .EditBoxes("edit1").Text
.EditBoxes("edit2").Text = Date - hiz
End With
End Sub
下記例はテキストボックスに入っている数字を基準に±するケ−ス。

Private Sub spn1_Change()
With UserForm1
.txt1.Text = .spn1.Value
End With
End Sub
Private Sub txt1_Change()
If Not IsNumeric(UserForm1.txt1) Then
MsgBox "数字を入力して下さい"
Exit Sub
End If
With UserForm1
.spn1.Value = .txt1
.txt1 = .spn1.Value
End With
End Sub
上記のように、数字以外はガ−ドしないと空白・アルファベット入力でエラ−になります。
目次へ戻る